package cn.zyq.charging.device.controller;

import cn.zyq.charging.common.pojo.JsonResult;
import cn.zyq.charging.common.pojo.param.GunStatusUpdateParam;
import cn.zyq.charging.common.pojo.vo.StationInfoVO;
import cn.zyq.charging.device.service.StationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 设备服务接口
 * @author yonqing.zhao
 */
@Slf4j
@RequestMapping("/device")
@RestController
@Api(tags="设备场站相关接口")
public class DeviceController {


    /**
     * 通过充电枪id获取场站信息(主要获取运营商id和站点id)
     * @param gunId
     * @return JsonResult
     */
    @ApiOperation("通过充电枪id获取场站信息")
    @GetMapping("/station/info/{gunId}")
    public JsonResult getStationInfo(@PathVariable("gunId")  Integer gunId){
        //@PathVariable是来自于spring框架的Restful风格传递参数时需要用此注解获取参数
        log.debug("获取充电站信息--入参-{}",gunId);

        //给界面返回响应的对象，所以定义为VO对象。
        StationInfoVO stationInfoVO=new StationInfoVO();
        stationInfoVO.setOperatorId(1);
        stationInfoVO.setStationId(1);
        return JsonResult.ok(stationInfoVO);
    }


    /**
     * @RequestBody: 用于将 HTTP 请求的正文（body）的数据映射为一个javaBean对象传递给控制器方法的参数上。
     * 这个注解通常与 @PostMapping、@PutMapping、@PatchMapping等注解一起使用，处理 POST、PUT、PATCH 等请求方法
     * 可以结合 @Valid 或 @Validated 注解进行数据校验（Controller类上标注@Validated，controller的方法参数上标注 @Valid ）
     * 实体类上用@NotBlank限制不能为空   @Min(1)限制最小值
     * @param gunStatusUpdateParam
     * @return
     */
    @ApiOperation("更新充电枪状态")
    @PostMapping("/station/gun/updateStatus")
    public JsonResult updateGunStatus(@RequestBody GunStatusUpdateParam gunStatusUpdateParam){
        //@RequestBody用于获取post方式提交的json参数
        log.info("更新枪的状态-{}",gunStatusUpdateParam);
        return JsonResult.ok(true);
    }


    @Autowired
    private StationService stationService;

    /**
     *
     * @param longitude 经度      浪  dʒɪ   t  u   的
     * @param latitude  纬度     赖 忒 t  u   的
     * @param radius    距离/半径    瑞     蝶儿 死
     * @return stationInfoVOS
     */
    @ApiOperation("获取附近的充电站列表")
    @GetMapping("/station/near")
    public JsonResult getNearStations(Double longitude, Double latitude, Double radius){
        //@RequestBody用于获取post方式提交的json参数
        log.info("获取附近的充电站-经度:{},维度:{},距离:{}",longitude,latitude,radius);
        List<StationInfoVO> stationInfoVOS=stationService.getNearStations(longitude,latitude,radius);
        return JsonResult.ok(stationInfoVOS);
    }


    @ApiOperation("获取充电站详情")
    @GetMapping("/station/detail/{id}")
    public JsonResult getStationDetail(@PathVariable("id")  Integer id){
        log.info("场站详情-id:{}",id);
        StationInfoVO stationInfoVO=stationService.getStationDetail(id);
        return JsonResult.ok(stationInfoVO);
    }

}


